package Leetcode;

import base.ListNode;

/**
 * 给定一个已排序的链表的头 head，删除原始链表中所有重复数字的节点，只留下不同的数字。返回已排序的链表。
 */
public class 力扣82_删除排序链表中的重复元素2 {
    public static void main(String[] args) {
        ListNode a1 = new ListNode(1);
        ListNode a2 = new ListNode(1);
        ListNode a3 = new ListNode(2);
        ListNode a4 = new ListNode(3);
        ListNode a5 = new ListNode(4);
        ListNode a6 = new ListNode(4);
        a1.next = a2;
        a2.next = a3;
        a3.next = a4;
        a4.next = a5;
        a5.next = a6;
        ListNode listNode = deleteDuplicates(a1);
        System.out.println(listNode);
    }

    static ListNode deleteDuplicates(ListNode head) {
        if (head == null) {
            return null;
        }
        // 由于头结点可能会被删除 定义一个辅助节点
        ListNode dummy = new ListNode(-1, head);
        ListNode cur = dummy;
        while (cur.next != null && cur.next.next != null) {
            // 当下两个节点相等的时候
            if (cur.next.val == cur.next.next.val) {
                // 记录重复的数字
                int dupVal = cur.next.val;
                // 往后遍历链表 直到找到不等于重复数字的节点
                while (cur.next != null && cur.next.val == dupVal) {
                    cur.next = cur.next.next;
                }
            } else {
                // 下两个节点不相等 直接跳过
                cur = cur.next;
            }
        }
        return dummy.next;
    }

}
